package upis.pf.DAO;

import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.hibernate.Criteria;
import org.hibernate.Session;

import upis.pf.DTO.PratoDTO;

public class PratoDAO {
	
	/*
	 * Retorna a lista de pratos registrados
	 */
	// TODO Avaliar tipo de retorno
	public PratoDTO consultar(PratoDTO paramConsulta) {
		PratoDTO resultado;
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		
		resultado = em.find(PratoDTO.class, paramConsulta.getCodprato());
		
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		return resultado;
	}
	
	/*
	 * Retorna a lista de todos pratos registrados
	 */
	// TODO Avaliar tipo de retorno
	public ArrayList<PratoDTO> todosPratos() {
		ArrayList<PratoDTO> resultado;
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		Session session = (Session) em.getDelegate();  
		Criteria criteria = session.createCriteria(PratoDTO.class);  
		
		resultado =  (ArrayList<PratoDTO>) criteria.list();
		
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		return resultado;
	}
	
	/*
	 * Inserir um prato
	 */
	public void incluir(PratoDTO prato) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		em.persist(prato);
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		
	}
	
	public void excluir(PratoDTO prato) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		PratoDTO p = em.find(PratoDTO.class, prato.getCodprato());
		
		em.remove(p);
		
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void alterar(PratoDTO prato) {
		
	}
}
